package waitandnotify01;

public class Cook extends Thread{
    public Cook(String name){
        super(name);
    }

    /*
        1.循环
        2.同步代码块
        3.判断共享数据是否已经到了末尾(到了末尾)
        4.判断共享数据是否已经到了末尾(没有到末尾,执行核心逻辑)
     */
    @Override
    public void run() {
        // 1.循环
        while (true) {
            // 2.同步代码块
            synchronized (Desk.lock){
                // 3.判断共享数据是否已经到了末尾(到了末尾)
                if (Desk.count == 0){
                    break;
                }else{
                    // 4.判断共享数据是否已经到了末尾(没有到末尾,执行核心逻辑)
                    // 判断桌子上是否有食物
                    if (Desk.foodFlag == 1){
                        try {
                            // 如果有,就等待
                            Desk.lock.wait();// 让当前线程跟锁进行绑定起来
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }else{
                        // 如果没有,就制作食物
                        int sy = 10-Desk.count+1;
                        System.out.println(getName() + "制作第"+sy+"碗面条");
                        // 修改桌子上的食物状态
                        Desk.foodFlag = 1;
                        // 叫醒等待的消费者开吃
                        Desk.lock.notifyAll();// 唤醒所有等待的线程
                    }
                }
            }
        }
    }
}
